/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.sadhar.sipp.tahunkelompokanggaranyangdigunakan;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.sadhar.sia.common.ClassConnection;

/**
 *
 * @author bloodrunk
 */
public class TahunKelompokAnggaranYangDigunakanDAOImpl implements TahunKelompokAnggaranYangDigunakanDAO {

    public TahunKelompokAnggaranYangDigunakanDAOImpl() {
        ClassConnection.getTransactionProxyFactoryBean().setTarget(this);
    }

    public List<Map> getDaftarKelompokAnggaranUmum(String tahun) {
        String sql = "SELECT * FROM  ppmk.kelompokBiaya,ppmk.posBiaya, ppmk.jenisBiaya" +
                "  WHERE ppmk.kelompokBiaya.tahunKelompok = ? " +
                "  AND ppmk.kelompokBiaya.isUmum ='Y' " +
                "  AND ppmk.posBiaya.kodePosBiaya = ppmk.kelompokBiaya.kodePosBiaya " +
                "  AND ppmk.jenisBiaya.kodeJenisBiaya = ppmk.kelompokBiaya.kodeJenisBiaya order by jenisBiaya";
        List<Map> result = ClassConnection.getJdbc().queryForList(sql, new Object[]{tahun});
        List<Map> jenisBiaya = new ArrayList<Map>();
        String currentJenisBiaya = "";
        for (Map map : result) {
            if (currentJenisBiaya.equalsIgnoreCase(map.get("jenisBiaya").toString())) {
                map.put("jenisBiaya", "");
                map.put("", currentJenisBiaya);
            } else {
                currentJenisBiaya = map.get("jenisBiaya").toString();
                map.put("", "");

            }
            jenisBiaya.add(map);
        }
        return result;

    }

    public List<Map> getDaftarKelompokAnggaranKhusus(String tahun) throws Exception {
        String sql = "SELECT * FROM ppmk.kelompokBiaya, ppmk.posBiayaKhususUnit, ppmk.posBiaya,kamus.unkerja " +
                " WHERE  ppmk.kelompokBiaya.tahunKelompok = ? AND  ppmk.kelompokBiaya.isUmum = 'N' " +
                " AND ppmk.posBiayaKhususUnit.kodeKelompokBiaya = ppmk.kelompokBiaya.kodeKelompokBiaya " +
                " AND ppmk.posBiaya.kodePosBiaya = ppmk.kelompokBiaya.kodePosBiaya " +
                " AND kamus.unkerja.Kd_unit_kerja = ppmk.posBiayaKhususUnit.kodeUnitKerja order by Nama_unit_kerja";

        List<Map> result = ClassConnection.getJdbc().queryForList(sql, new Object[]{tahun});
        List<Map> namaUnitKerja = new ArrayList<Map>();
        String currentNamaUnitKerja = "";
        for (Map map : result) {
            if (currentNamaUnitKerja.equalsIgnoreCase(map.get("Nama_unit_kerja").toString())) {
                map.put("Nama_unit_kerja", "");
                map.put("", currentNamaUnitKerja);
            } else {
                currentNamaUnitKerja = map.get("Nama_unit_kerja").toString();
                map.put("", "");
            }
            namaUnitKerja.add(map);
        }
        return result;

    }

    public List<Map> getDaftarSubKelompokAnggaranUmum(String tahun) throws Exception {
        String sql = "select posBiaya.namaPosBiaya, pos.namaPosBiaya as sub  from subkelompokAnggaranBiaya as sub " +
                " inner join kelompokBiaya as klkp on (sub.kodeKelompokBiaya=klkp.kodeKelompokBiaya)" +
                " inner join posBiaya as pos on (sub.kodePosBiaya=pos.kodePosBiaya)" +
                " inner join posBiaya  on (klkp.kodePosBiaya=posBiaya.kodePosBiaya)" +
                " where tahunKelompok=? order by posBiaya.namaPosBiaya ";
        List<Map> result = ClassConnection.getJdbc().queryForList(sql, new Object[]{tahun});
        List<Map> namaPosBiaya = new ArrayList<Map>();
        String currentNamaKelompokAnggaran = "";
        for (Map map : result) {
            if (currentNamaKelompokAnggaran.equalsIgnoreCase(map.get("namaPosBiaya").toString())) {
                map.put("namaPosBiaya", "");
                map.put("", currentNamaKelompokAnggaran);
            } else {
                currentNamaKelompokAnggaran = map.get("namaPosBiaya").toString();
                map.put("", "");
            }
            namaPosBiaya.add(map);
        }
        return result;
    }

    public List<Map> getTahunKelompokAnggaranYangDigunakan(String tahun) throws Exception {
        List<Map> result = ClassConnection.getJdbc().
                queryForList("select * from ppmk.kelompokAnggaranYangDigunakan where tahunAnggaran=?", new Object[]{tahun});
        List<Map> namaPosBiaya = new ArrayList<Map>();
        String currentTahunKelompokAnggaran = "";
        for (Map map : result) {
            if (currentTahunKelompokAnggaran.equalsIgnoreCase(map.get("tahunAnggaran").toString())) {
                map.put("tahunAnggaran", "");
                map.put("", currentTahunKelompokAnggaran);
            } else {
                currentTahunKelompokAnggaran = map.get("tahunAnggaran").toString();
                map.put("", "");
            }
            namaPosBiaya.add(map);
        }
        return result;
    }

    public void insert(TahunKelompokAnggaranYangDigunakan tahunKelompokAnggaranYangDigunakan) {
        String sql = "INSERT INTO ppmk.kelompokAnggaranYangDigunakan(tahunAnggaran,tahunKelompok) VALUES(?,?)";
        ClassConnection.getJdbc().update(sql, new Object[]{
                    tahunKelompokAnggaranYangDigunakan.getTahunAnggaran(),
                    tahunKelompokAnggaranYangDigunakan.getTahunKelompok()});
    }

    public void update(TahunKelompokAnggaranYangDigunakan tahunKelompokAnggaranYangDigunakan) {
        String sql = "UPDATE ppmk.kelompokAnggaranYangDigunakan SET tahunKelompok=? " +
                " WHERE idKelompokAnggaranYangDigunakan=?";
        ClassConnection.getJdbc().update(sql, new Object[]{
                    tahunKelompokAnggaranYangDigunakan.getTahunKelompok(),
                    tahunKelompokAnggaranYangDigunakan.getIdKelompokAnggaranYangDigunakan()
                });
    }
}


